// Package tools 路由工具包
package tools

import (
    "fmt"
    "github.com/kataras/iris/v12/context"
    "reflect"
)

// RouterCore 路由核心配置，简化路由使用
func RouterCore(ctx context.Context, req interface{}, i interface{}) interface{} {
    // 接收请求参数，使用iris将请求数据，序列化到VOReq对象中
    switch ctx.Method() {
    case "GET":
        fallthrough
    case "DELETE":
        CtxReadQuery(ctx, req)
    case "POST":
        fallthrough
    case "PUT":
        CtxReadJSON(ctx, req)
    default:
        panic(fmt.Errorf("请求类型异常！"))
    }

    object := reflect.ValueOf(i)
    paramList := []reflect.Value{reflect.ValueOf(req)}
    res := object.Call(paramList)
    return res[0].Interface()
}

// CtxReadQuery 解析Query参数
func CtxReadQuery(ctx context.Context, req interface{}) {

    // 这里改为自定义异常，做为统一处理;
    if err := ctx.ReadQuery(req); err != nil {
        panic(err.Error())
    }
}

// CtxReadJSON 解析Body参数
func CtxReadJSON(ctx context.Context, req interface{}) {

    // 这里改为自定义异常，做为统一处理
    if err := ctx.ReadJSON(req); err != nil {
        panic(err.Error())
    }
}
